Add new "tab moves focus" property (#122709)
authorSoeren Sandmann <sandmann@daimi.au.dk>
Sun, 21 Sep 2003 21:17:44 +0000 (21:17 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Sun, 21 Sep 2003 21:17:44 +0000 (21:17 +0000)
Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

* gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktextview.c
gtk/gtktextview.h

index cf317394788296103a729ee00fae036b0182c57e..5e58a8ce0822712a6c6a052a6d26be510758c042 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
+
 2003-09-20  Tor Lillqvist  <tml@iki.fi>
 
        * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid
index cf317394788296103a729ee00fae036b0182c57e..5e58a8ce0822712a6c6a052a6d26be510758c042 100644 (file)
@@ -1,3 +1,7 @@
+Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
+
 2003-09-20  Tor Lillqvist  <tml@iki.fi>
 
        * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid
index cf317394788296103a729ee00fae036b0182c57e..5e58a8ce0822712a6c6a052a6d26be510758c042 100644 (file)
@@ -1,3 +1,7 @@
+Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
+
 2003-09-20  Tor Lillqvist  <tml@iki.fi>
 
        * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid
index cf317394788296103a729ee00fae036b0182c57e..5e58a8ce0822712a6c6a052a6d26be510758c042 100644 (file)
@@ -1,3 +1,7 @@
+Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
+
 2003-09-20  Tor Lillqvist  <tml@iki.fi>
 
        * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid
index cf317394788296103a729ee00fae036b0182c57e..5e58a8ce0822712a6c6a052a6d26be510758c042 100644 (file)
@@ -1,3 +1,7 @@
+Sun Sep 21 23:13:37 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709)
+
 2003-09-20  Tor Lillqvist  <tml@iki.fi>
 
        * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid
index c79c136a659986cb8f397647054304732cb0d4b7..b82dec79062179407e3b91ef1e4e3608b5a28b59 100644 (file)
@@ -140,6 +140,7 @@ enum
   PROP_CURSOR_VISIBLE,
   PROP_BUFFER,
   PROP_OVERWRITE,
+  PROP_TAB_MOVES_FOCUS,
   LAST_PROP
 };
 
@@ -666,7 +667,14 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
                                                         FALSE,
                                                         G_PARAM_READWRITE));
 
-  
+  g_object_class_install_property (gobject_class,
+                                   PROP_TAB_MOVES_FOCUS,
+                                   g_param_spec_boolean ("tab_moves_focus",
+                                                        _("Tab moves focus"),
+                                                        _("Whether tab moves focus"),
+                                                        FALSE,
+                                                        G_PARAM_READWRITE));
+
   /*
    * Signals
    */
@@ -2592,6 +2600,10 @@ gtk_text_view_set_property (GObject         *object,
       gtk_text_view_set_buffer (text_view, GTK_TEXT_BUFFER (g_value_get_object (value)));
       break;
 
+    case PROP_TAB_MOVES_FOCUS:
+      gtk_text_view_set_tab_moves_focus (text_view, g_value_get_boolean (value));
+      break;
+      
     default:
       g_assert_not_reached ();
       break;
@@ -2661,6 +2673,10 @@ gtk_text_view_get_property (GObject         *object,
     case PROP_OVERWRITE:
       g_value_set_boolean (value, text_view->overwrite_mode);
       break;
+
+    case PROP_TAB_MOVES_FOCUS:
+      g_value_set_boolean (value, text_view->tab_moves_focus);
+      break;
       
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -3795,10 +3811,10 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event)
             event->keyval == GDK_KP_Tab) &&
            !(event->state & GDK_CONTROL_MASK))
     {
-      /* If the text widget isn't editable overall, move the focus
-       * instead
+      /* If the text widget isn't editable overall, or if the application
+       * has turned on "tab_moves_focus", move the focus instead
        */
-      if (text_view->editable)
+      if (!text_view->tab_moves_focus && text_view->editable)
        {
          gtk_text_view_commit_text (text_view, "\t");
          obscure = TRUE;
@@ -5169,6 +5185,52 @@ gtk_text_view_set_overwrite (GtkTextView *text_view,
     }
 }
 
+/**
+ * gtk_text_view_set_tab_moves_focus:
+ * @text_view: A #GtkTextView
+ * @tab_moves_focus: %TRUE if pressing the Tab should move the keyboard focus, %FALSE, if pressing the Tab key should insert a Tab character.
+ * 
+ * Sets the behavior of the text widget when the Tab key is pressed. If @tab_moves_focus
+ * is %TRUE the keyboard focus is moved to the next widget in the focus chain. If
+ * @tab_moves_focus is %FALSE a tab character is inserted.
+ * 
+ * Since: 2.4
+ **/
+void
+gtk_text_view_set_tab_moves_focus (GtkTextView *text_view,
+                                  gboolean     tab_moves_focus)
+{
+  g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
+
+  tab_moves_focus = tab_moves_focus != FALSE;
+
+  if (text_view->tab_moves_focus != tab_moves_focus)
+    {
+      text_view->tab_moves_focus = tab_moves_focus;
+
+      g_object_notify (G_OBJECT (text_view), "tab_moves_focus");
+    }
+}
+
+/**
+ * gtk_text_view_get_tab_moves_focus:
+ * @text_view: A #GtkTextView
+ * 
+ * Returns whether pressing the Tab key moves the keyboard focus. See
+ * gtk_text_view_set_tab_moves_focus().
+ * 
+ * Return value: %TRUE if pressing the Tab key moves the keyboard focus.
+ * 
+ * Since: 2.4
+ **/
+gboolean
+gtk_text_view_get_tab_moves_focus (GtkTextView *text_view)
+{
+  g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
+
+  return text_view->tab_moves_focus;
+}
+
 static void
 gtk_text_view_move_focus (GtkTextView     *text_view,
                           GtkDirectionType direction_type)
index fb6559070615e5ae03a72c514e313f7684388905..c82ea1de98b3c02f84335074c4f35c035aba4440 100644 (file)
@@ -93,9 +93,10 @@ struct _GtkTextView
   /* if we have reset the IM since the last character entered */  
   guint  need_im_reset : 1;    
 
-  /* these flags are no longer used */
-  guint reserved1 : 1;
-  guint reserved2 : 1;
+  guint tab_moves_focus : 1;
+  
+  /* this flag is no longer used */
+  guint reserved : 1;
   
   /* debug flag - means that we've validated onscreen since the
    * last "invalidate" signal from the layout
@@ -326,6 +327,9 @@ gboolean         gtk_text_view_get_editable           (GtkTextView      *text_vi
 void             gtk_text_view_set_overwrite          (GtkTextView      *text_view,
                                                       gboolean          overwrite);
 gboolean         gtk_text_view_get_overwrite          (GtkTextView      *text_view);
+void            gtk_text_view_set_tab_moves_focus    (GtkTextView      *text_view,
+                                                      gboolean          tab_moves_focus);
+gboolean        gtk_text_view_get_tab_moves_focus    (GtkTextView      *text_view);
 void             gtk_text_view_set_pixels_above_lines (GtkTextView      *text_view,
                                                        gint              pixels_above_lines);
 gint             gtk_text_view_get_pixels_above_lines (GtkTextView      *text_view);